/*
Copyright (c) [2019年5月1日] [吴超]
[MBT_Studio] is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
		 http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
#pragma once

#include "../节点.h"





class C_数据缓存写入节点 : public C_节点基类 {

public:
	C_数据缓存写入节点(S_设备环境& ctx);
	~C_数据缓存写入节点();

	S_Props	m_Path;
	//S_Props m_方式;
	S_Props m_格式;
	S_Props	m_文件名;

	bool	f_update();

	void	f_读取(FILE* f);
	void	f_写入(FILE* f);
};

C_节点基类* f_node_加载写入数据缓存节点(S_设备环境& ctx, FILE* f);
void		f_node_保存写入数据缓存节点(C_节点基类* n, FILE* f);




class C_数据缓存读取节点 : public C_节点基类 {

public:
	C_数据缓存读取节点(S_设备环境& ctx);
	~C_数据缓存读取节点();

	S_Props	m_Path;
	//S_Props m_方式;
	S_Props m_格式;
	S_Props	m_文件名;

	bool	f_update();

	void	f_读取(FILE* f);
	void	f_写入(FILE* f);
};

C_节点基类* f_node_加载数据缓存读取节点(S_设备环境& ctx, FILE* f);
void		f_node_保存数据缓存读取节点(C_节点基类* n, FILE* f);





class C_物体缓存节点 : public C_节点基类 {
	std::string m_上一次加载路径;

	std::vector<S_Tranform> m_变换组;
public:
	C_物体缓存节点(S_设备环境& ctx);
	~C_物体缓存节点();

	S_Props	m_Path;
	S_Props m_类型;
	S_Props	m_应用变换;
	S_Props	m_中心变换方式;
	S_Props	m_实时写入;

	bool	f_update();

	void	f_读取(FILE* f);
	void	f_写入(FILE* f);
	S_物体* f_get虚拟体();
	void	f_入回收();
	void	f_回收();
	void    f_Show(bool open);
};

C_节点基类* f_node_创建物体缓存节点(S_设备环境& ctx, C_节点树* 子节点树);
C_节点基类* f_node_加载物体缓存节点(S_设备环境& ctx, FILE* f);
void		f_node_保存物体缓存节点(C_节点基类* n, FILE* f);




class C_网格缓存写入节点 : public C_节点基类 {
	std::string m_上一次加载路径;
public:
	C_网格缓存写入节点(S_设备环境& ctx);
	~C_网格缓存写入节点();

	S_Props	m_Path;
	S_Props	m_文件名称;
	S_Props	m_覆盖文件;
	S_Props	m_序列文件;
	S_Props m_元素;
	S_Props	m_应用变换;
	S_Props	m_中心变换方式;
	S_Props	m_压缩;
	S_Props	m_压缩等级;
	S_Props	m_实时写入;

	bool	f_update();

	void	f_读取(FILE* f);
	void	f_写入(FILE* f);
	S_物体* f_get虚拟体();
	void	f_入回收();
	void	f_回收();
	void    f_Show(bool open);
};

C_节点基类* f_node_创建网格缓存写入节点(S_设备环境& ctx, C_节点树* 子节点树);
C_节点基类* f_node_加载网格缓存写入节点(S_设备环境& ctx, FILE* f);
void		f_node_保存网格缓存写入节点(C_节点基类* n, FILE* f);




class C_读取网格缓存节点 : public C_节点基类 {
	std::string m_上一次加载路径;

	std::vector<S_Tranform> m_变换组;
public:
	C_读取网格缓存节点(S_设备环境& ctx);
	~C_读取网格缓存节点();

	S_Props	m_Path;
	S_Props	m_文件名称;
	S_Props	m_序列文件;
	S_Props	m_循环区间;
	S_Props m_元素;
	S_Props	m_应用变换;
	S_Props	m_中心变换方式;

	bool	f_update();

	void	f_读取(FILE* f);
	void	f_写入(FILE* f);
	S_物体* f_get虚拟体();
	void	f_入回收();
	void	f_回收();
	void    f_Show(bool open);
};

C_节点基类* f_node_创建读取网格缓存节点(S_设备环境& ctx, C_节点树* 子节点树);
C_节点基类* f_node_加载读取网格缓存节点(S_设备环境& ctx, FILE* f);
void		f_node_保存读取网格缓存节点(C_节点基类* n, FILE* f);



//class C_数据缓存写入节点 : public C_节点基类 {
//
//public:
//	C_数据缓存写入节点(S_设备环境& ctx);
//	~C_数据缓存写入节点();
//
//	S_Props	m_Path;
//	//S_Props m_方式;
//	S_Props m_格式;
//	S_Props	m_文件名;
//
//	bool	f_update();
//
//	void	f_读取(FILE* f);
//	void	f_写入(FILE* f);
//};
//
//C_节点基类* f_node_加载写入数据缓存节点(S_设备环境& ctx, FILE* f);
//void		f_node_保存写入数据缓存节点(C_节点基类* n, FILE* f);
//
//
//
//
//class C_数据缓存读取节点 : public C_节点基类 {
//
//public:
//	C_数据缓存读取节点(S_设备环境& ctx);
//	~C_数据缓存读取节点();
//
//	S_Props	m_Path;
//	//S_Props m_方式;
//	S_Props m_格式;
//	S_Props	m_文件名;
//
//	bool	f_update();
//
//	void	f_读取(FILE* f);
//	void	f_写入(FILE* f);
//};
//
//C_节点基类* f_node_加载数据缓存读取节点(S_设备环境& ctx, FILE* f);
//void		f_node_保存数据缓存读取节点(C_节点基类* n, FILE* f);





